2) 제약 조건 기반 자동 계산 (solve { ... } 블록)

도형을 그릴 때 점의 정확한 $(x, y)$ 좌표를 수학적으로 직접 계산하기 번거롭거나 기하학적 조건만 명확한 경우가 많습니다. Mathit의 solve { ... } 블록을 이용하면 미지수 기호(?)와 제약 조건(길이, 각도, 직교, 위치 관계 등)을 명시하는 것만으로 솔버가 자동으로 방정식의 해를 계산하여 도형을 완성합니다.

1. solve { ... } 블록의 기본 구조를 알아 보자

solve 블록 내에서는 구하고자 하는 점의 좌표를 미지수 ?로 선언하고, 아래에 조건식(==)을 나열합니다.

A = (0, 0)
B = (4, 0)

// 점 C의 위치를 기하학적 조건으로 구하기
solve {
    C = (?, ?) // x, y 좌표가 미지수
    dist(A, C) == 3 // AC의 길이는 3
    dist(B, C) == 5 // BC의 길이는 5
    C.y > 0 // C는 x축 위쪽에 위치 (해의 유일성 보장)
}

솔버가 계산을 마치는 즉시 C 변수에는 계산된 결과 좌표가 저장되며 이후 코드에서 일반 점처럼 바로 사용할 수 있습니다.

2. 주요 제약 조건 함수

solve { ... } 블록 내에서 사용할 수 있는 다양한 기하 제약 조건 함수입니다.

제약 조건 표현식 설명
dist(A, B) == d 두 점 $A, B$ 사이의 거리가 $d$
|

| angle(A, B, C) == deg | 세 점이 이루는 각도 $\angle ABC$가 지정된 각도 | | is_orthogonal(L1, L2) | 두 직선 $L1, L2$가 서로 직교함 | | is_parallel(L1, L2) | 두 직선 $L1, L2$가 서로 평행함 | | on_line(P, A--B) | 점 $P$가 선분 또는 직선 $AB$ 위에 존재함 | | on_circle(P, C) | 점 $P$가 원 $C$의 둘레 위에 존재함 | | P.x == val, P.y > val | 좌표의 특정 성분 값 제한 및 부등식 조건 |

3. 다중 미지수 그리고 복합 조건 풀이

여러 점의 위치가 서로 얽혀 있는 복잡한 문제도 여러 개의 미지수(?)를 사용하여 동시에 제약 조건을 적용할 수 있습니다.

A = (0, 0)

// 두 점 B와 C의 위치를 동시에 계산
solve {
    B = (?, 0) // B는 x축 위의 점
    C = (?, ?) // C는 평면상의 점

    dist(A, B) == 4
    angle(C, A, B) == 60deg // angle CAB = 60도
    dist(A, C) == 5
    C.y > 0
}

// 계산된 점들로 마름모/삼각형 완성
poly: A--B--C, stroke=1.5pt

4. 예제를 봅시다.

설명만 들으면 이해가 되지 않을 수도 있습니다.

다음은 변의 길이와 각도 조건만으로 세 꼭짓점을 풀어서 그리는 예시입니다.

A = (0, 0)

solve {
    B = (?, 0)
    C = (?, ?)
    D = (0, ?)

    dist(A, B) == 5
    dist(B, C) == 4
    dist(C, D) == 3
    angle(A, B, C) == 90deg
    D.y > 0
    C.x > 0
}

// 사각형 그리기
poly: A--B--C--D, stroke=1.5pt, fill=#blue/10

// 직각 및 각도 표시
right_ang: A--B--C, size=8pt
right_ang: D--A--B, size=8pt

// 점 및 라벨 표시
dot: A"A"(sw), B"B"(se), C"C"(ne), D"D"(nw)

Mathit은 이 외에도 자동화를 위해 삼각형의 5심(외심, 내심, 무게중심, 수심, 방심)을 구하는 매크로 함수가 있습니다. 다음 문서에서는 이에 대해 알아보겠습니다.

이 문서가 도움이 되셨나요?

문서 개선에 반영할 솔직한 피드백을 선택해주세요.

Mathit Documentation 개발: Feynerin